package juego;
import java.util.ArrayList;
import java.util.Iterator;


public abstract class Armado extends Vehiculo {
	
	//Atributos de instancia
	protected ArrayList<Disparable> armamento;
	protected CronometroEspera cronometro;
	
	//Metodos
	
	//Constructor. recibe una coordenada que representa el origen
	//un entero qu representa la resistencia inicial
	//y otro entero que representa el tiempo entre disparos
	public Armado(Coordenada coordenada, int vida, int tiempoDeEspera) {
		super(coordenada, vida);
		this.armamento = new ArrayList<Disparable>();
		this.cronometro = new CronometroEspera(tiempoDeEspera);
	}

	
	//recibe la lista de objetos.
	//agrega nuevos proyectiles a la lista, o lanza una excepcionMunicionAgotada
	//o una excepcionEsperaInsuficiente
	protected void disparar(ArrayList<Movil> listaDeObjetos){
		if (this.vivo){
			if (this.cronometro.puedoActuar()){
				Iterator<Disparable> iterador = armamento.iterator();
				while (iterador.hasNext()){
					Disparable unArma = iterador.next();
					Proyectil unProyectil = (unArma.disparar(this.ubicacion));
					listaDeObjetos.add(unProyectil);}
			}
			else{
				throw new ExcepcionEsperaInsuficiente();
			}
		}	
	}
	
	//Primero se mueve. Luego verifica si fue impactado,
	//y actua en consecuencia. Por ultimo, si no fue destruido dispara.
	public int vivir(ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		int puntaje = 0;
		
		//Movimiento
		if (this.huyendo){
			this.huir();}
		else{
			this.movimientoPropio();}
		
		//Impacto
		puntaje = (this.impactar(listaDeMoviles,listaDeBotines));
		if (!this.huyendo){
			try {
				this.disparar(listaDeMoviles);}
			catch(Exception e){
			}	
		}
		return puntaje;
	}
	
}
		

